package tests;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;
import fachada.Fachada;
import interfaces.IFachada;

import java.util.List;

import modelos.Pessoa;

import org.junit.After;
import org.junit.Test;

public class PessoaTest {

	private static IFachada fachada = new Fachada();

	@After
	public void tearDown() throws Exception {
		List<Pessoa> pessoas = fachada.listarPessoas();
		for(Pessoa p : pessoas) {
			fachada.removerPessoa(p);
		}
	}

	@Test
	public void testSalvarPessoa() {
		assertEquals(0, fachada.listarPessoas().size());
		
		Pessoa p1 = new Pessoa();
		p1.setNome("pedro");
		p1.setCpf("000.000.000-00");
		p1 = fachada.salvarPessoa(p1);
		
		assertEquals(1, fachada.listarPessoas().size());
		
		Pessoa p2 = new Pessoa();
		p2.setNome("pedro tiago");
		p2.setCpf("000.000.000-00");
		p2 = fachada.salvarPessoa(p2);
		
		assertNull(p2);
		assertNotSame(2, fachada.listarPessoas().size());
		assertEquals(1, fachada.listarPessoas().size());
	}
	
	@Test
	public void testAtualizarPessoa() {
		assertEquals(0, fachada.listarPessoas().size());
		
		Pessoa p1 = new Pessoa();
		p1.setNome("pedro");
		p1.setCpf("000.000.000-00");
		p1 = fachada.salvarPessoa(p1);
		
		assertEquals(1, fachada.listarPessoas().size());
		
		p1 = fachada.getPessoaPorCpf("000.000.000-00");
		assertNotNull(p1);
		assertEquals("pedro", p1.getNome());
		
		p1.setNome("pedro tiago");
		p1 = fachada.atualizarPessoa(p1);
		assertNotNull(p1);
		assertNotSame("pedro", p1.getNome());
		assertEquals("pedro tiago", p1.getNome());
		
		Pessoa p2 = new Pessoa();
		p2.setNome("david");
		p2.setEmail("david@ffm.com.br");
		p2.setCpf("111.111.111-11");
		p2 = fachada.salvarPessoa(p2);
		
		assertEquals(2, fachada.listarPessoas().size());
		assertNotNull(p2);
		
		assertEquals("david", p2.getNome());
		assertEquals("david@ffm.com.br", p2.getEmail());
		
		p1.setEmail("pedrotiago@ffm.com.br");
		p1 = fachada.atualizarPessoa(p1);
		assertNotNull(p1);
		assertEquals("pedrotiago@ffm.com.br", p1.getEmail());
	}
	
	@Test
	public void testRemoverPessoa() {
		Pessoa p1 = new Pessoa();
		p1.setNome("pedro");
		p1.setCpf("000.000.000-00");
		p1 = fachada.salvarPessoa(p1);
		
		Pessoa p2 = new Pessoa();
		p2.setNome("david");
		p2.setEmail("david@ffm.com.br");
		p2.setCpf("111.111.111-11");
		p2 = fachada.salvarPessoa(p2);
		
		assertEquals(2, fachada.listarPessoas().size());
		
		p1 = new Pessoa();
		p1.setNome("jairo");
		p1.setCpf("222.222.222-22");
		p1 = fachada.salvarPessoa(p1);
		
		assertEquals(3, fachada.listarPessoas().size());
		assertNotNull(p1);
		
		p1 = fachada.getPessoaPorCpf("111.111.111-11");
		assertNotNull(p1);
		fachada.removerPessoa(p1);
		assertEquals(2, fachada.listarPessoas().size());
		assertNull(fachada.getPessoaPorCpf("111.111.111-11"));
		
		p1 = fachada.getPessoaPorCpf("000.000.000-00");
		fachada.removerPessoa(p1);
		assertEquals(1, fachada.listarPessoas().size());
		assertNull(fachada.getPessoaPorCpf("000.000.000-00"));
		
		p1 = fachada.getPessoaPorCpf("222.222.222-22");
		fachada.removerPessoa(p1);
		assertEquals(0, fachada.listarPessoas().size());
		assertNull(fachada.getPessoaPorCpf("222.222.222-22"));
	}

}
